package com.zjun.utils;

import com.alibaba.ttl.TransmittableThreadLocal;
import com.zjun.utils.pojo.DTO.UserInfoDto;

import java.util.Optional;

/**
 * 用户上下文
 */
public class UserContext {
    private static final ThreadLocal<UserInfoDto> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();

    /**
     * 设置用户上下文
     * @param userInfoDto 用户信息
     */
    public static void setUser(UserInfoDto userInfoDto){
        USER_THREAD_LOCAL.set(userInfoDto);
    }

    /**
     * 获取上下文用户ID
     * @return 用户ID
     */
    public static String getUserId(){
        UserInfoDto userInfoDto = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDto).map(UserInfoDto::getUserId).orElse(null);
    }

    /**
     * 获取上下文用户名称
     * @return 用户名称
     */
    public static String getUserName(){
        UserInfoDto userInfoDto = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDto).map(UserInfoDto::getUsername).orElse(null);
    }

    /**
     * 获取上下文用户真实名称
     * @return 用户真实名称
     */
    public static String getRealName(){
        UserInfoDto userInfoDto = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDto).map(UserInfoDto::getRealName).orElse(null);
    }

    /**
     * 清理用户上下文环境
     */
    public static void removeUser(){
        USER_THREAD_LOCAL.remove();
    }
}
